SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE dbo.pacalcular

@Convocatoria INT,
@Agente INT,
@Nivel INT,
@Ciclo INT

AS
SET NOCOUNT ON
DECLARE @Formula VARCHAR(100)
DECLARE @Concepto INT
DECLARE @Inscripcion INT
DECLARE @Error INT
DECLARE @TipoConvocatoria AS INT
DECLARE @IdAgente as int,@cargo as int ,@asignatura as int



BEGIN TRANSACTION
             SET @ERROR=0

	-- Si existen calificaciones para la inscripcion, se elimiman...
	IF EXISTS(SELECT * FROM tb_CalificacionesDeInscripcion CI INNER JOIN tb_InscripcionesConvocatorias I ON I.IdInscripcionConvocatoria = CI.Inscripcion INNER JOIN tb_Convocatorias C ON C.IdConvocatoria = I.Convocatoria
                          INNER JOIN tb_Agentes A ON A.IdAgente = I.Agente WHERE C.IdConvocatoria = @Convocatoria AND A.Documento = @Agente ) 
                         BEGIN --AND I.Nivel = @Nivel AND I.Ciclo = @Ciclo
		print 'borro los puntajes del agente ' + cast(@Agente as varchar) + 'en la convocatoria ' + cast(@convocatoria as varchar)
		DELETE CI
		FROM tb_CalificacionesDeInscripcion CI 
		INNER JOIN tb_InscripcionesConvocatorias I ON I.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Convocatorias C ON C.IdConvocatoria = I.Convocatoria
		INNER JOIN tb_Agentes A ON A.IdAgente = I.Agente
		WHERE C.IdConvocatoria = @Convocatoria AND A.Documento = @Agente AND I.Nivel = @Nivel AND I.Ciclo = @Ciclo

	END

	DECLARE X CURSOR FORWARD_ONLY FOR

	SELECT CP.FormulaPuntaje, CP.IDConcepto, IC.IdInscripcionConvocatoria,CP.TipoConvocatoria,IC.Agente,ic.Cargogenerico,IC.asignaturaGenerica
	FROM tb_ConceptosDePuntaje CP INNER JOIN tb_TiposDeConvocatorias TC ON CP.TipoConvocatoria = TC.IdTipoConvocatoria 
	INNER JOIN tb_Convocatorias C ON C.TipoConvocatoria = TC.IdTipoConvocatoria
	INNER JOIN tb_InscripcionesConvocatorias IC ON IC.Convocatoria = C.IdConvocatoria
	INNER JOIN tb_Agentes A ON A.Idagente = IC.Agente
	WHERE C.IdConvocatoria = @Convocatoria AND CP.FormulaPuntaje IS NOT NULL AND A.Documento = @Agente
	AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
	AND IC.IdInscripcionConvocatoria = (SELECT MIN(IdInscripcionConvocatoria) FROM tb_InscripcionesConvocatorias 
                WHERE Agente = IC.Agente and Convocatoria = IC.Convocatoria AND CargoGenerico = IC.CargoGenerico AND AsignaturaGenerica = IC.AsignaturaGenerica)-- AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo)

	OPEN X

	FETCH NEXT FROM X INTO @Formula, @Concepto, @Inscripcion, @TipoConvocatoria, @idagente,@cargo,@asignatura

	WHILE @@FETCH_STATUS = 0 BEGIN
		
		-- Forma el sql dinamico con el llamado al concepto
		DECLARE @temp VARCHAR(8000)
		SELECT @temp = 'DECLARE @Puntaje FLOAT ' + CHAR(10) + 'SET @Puntaje = 0 ' + CHAR(10)
		SELECT @temp = @temp + 'EXEC ' +@Formula + ' ' + CONVERT(VARCHAR, @Inscripcion) + ', @Puntaje OUTPUT, 0' + CHAR(10)
		SELECT @temp = @temp + 'EXEC paAgregar ' + CONVERT(VARCHAR, @Inscripcion) + ', ' + CONVERT(VARCHAR, @Concepto) +', @Puntaje'+ ', ' + CONVERT(VARCHAR, @IdAgente)  + ', ' + CONVERT(VARCHAR, @Cargo)+ ', ' + CONVERT(VARCHAR, @Asignatura)+ ', ' + CONVERT(VARCHAR, @Convocatoria)   
		-- Ejecuta el sql dinamico 
--		print @temp
		EXEC(@temp)
		SET @Error = @@ERROR
		
		IF @Error <> 0 BEGIN
			DECLARE @t VARCHAR(100)
			SET @t = 'PROCEDIMIENTO ' + @Formula
			RAISERROR(@t, 16, 1)
			GOTO Salir
		END
		
		FETCH NEXT FROM X INTO @Formula, @Concepto, @inscripcion, @TipoConvocatoria, @Idagente,@cargo,@asignatura
	END

	CLOSE X
	DEALLOCATE X

	--  COMPLETA EL CONCEPTO PUNTAJE FINAL

	if  @TipoConvocatoria = 1 
	BEGIN
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion, 234, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.idAgente = IC.Agente
		WHERE IC.Convocatoria = @Convocatoria AND A.Documento = @Agente AND CI.Concepto NOT IN(245, 246, 247, 248, 234, 235, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542) AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR
		IF @Error <> 0 GOTO Salir
		--update tb_inscripcionesconvocatorias set pje = ojoooooooooooooooooooooo   ARREGLAR 
	END
	if  @TipoConvocatoria = 2 
	BEGIN
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion, 329, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.idAgente = IC.Agente
		WHERE IC.Convocatoria = @Convocatoria AND A.Documento = @Agente AND CI.Concepto NOT IN(245, 246, 247, 248, 234, 235, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542) AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR
		IF @Error <> 0 GOTO Salir
	END
	--  COMPLETA EL CONCEPTO PUNTAJE ACRECENTAMINETO
	if  @TipoConvocatoria = 1 
	BEGIN
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion, 235, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.IdAgente = IC.Agente	
		WHERE IC.Convocatoria = @Convocatoria AND A.Documento = @Agente AND CI.Concepto NOT IN (245, 246, 247, 248, 234, 235, 191, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542)
		AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir
	END
/*	--  COMPLETA EL CONCEPTO PUNTAJE MOD ARTISTICA
	INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
	SELECT CI.Inscripcion, 473, SUM(CI.Puntaje)
	FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
	INNER JOIN tb_Agentes A ON A.IdAgente = IC.Agente	
	WHERE IC.Convocatoria = @Convocatoria AND A.Documento = @Agente AND CI.Concepto NOT IN (245, 246, 247, 248, 234, 235, 235, 473,535,536,537,538,539,540,541,542)
	AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
	GROUP BY CI.Inscripcion
	SET @Error = @@ERROR
*/
Salir:
IF @Error <> 0 
	ROLLBACK TRANSACTION
ELSE 
	COMMIT TRANSACTION
GO
